#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 100010
using namespace std;
long long n,m;
long long p[MAXN];
struct point{
    long long st,en,pr;
}po[MAXN];
bool cmp(point i,point j){
    if(i.st!=j.st)return i.st<j.st;
    else return i.en<j.en;
}
long long dp[MAXN];
int main(){
    long long i,j,k;
    scanf("%lld%lld",&n,&m);
    long long tim=0;
    for(i=1;i<=n;i++){
        scanf("%lld",&p[i]);
    }
    for(i=1;i<=m;i++){
        long long x;
        scanf("%lld%lld%lld",&po[i].st,&po[i].en,&x);
        po[i].pr=p[x];
        tim=max(tim,po[i].en);
    }
    sort(po+1,po+m+1,cmp);
    long long las=0;
    long long ans=0;
    long long cnt=1; 
    for(i=0;i<=tim;i++){
        dp[i]=max(dp[i-1],dp[i]);
        while(po[cnt].st==i&&cnt<m+1){
            dp[po[cnt].en]=max(dp[po[cnt].en],dp[i]+(po[cnt].en-po[cnt].st)*po[cnt].pr);
            cnt++;
        }
    }
    cout<<dp[tim];
    return 0;
} 
